home *** CD-ROM | disk | FTP | other *** search
- /*
- ** Copyright 1994, Home Pages, Inc.
- **
- ** Please read the file COPYRIGHT for specific information.
- **
- ** Home Pages, Inc.
- ** 257 Castro St. Suite 219
- ** Mountain View, CA 94041
- **
- ** Phone: 1 415 903 5353
- ** Fax: 1 415 903 5345
- **
- ** EMail: support@homepages.com
- **
- */
-
- #include <stdio.h>
- #include <ctype.h>
- extern char *strchr();
- #define TRUE 1
- #define FALSE 0
- #include "gif.h"
-
- struct colorTable_s {
- int r,g,b;
- char *name;
- } colorTable [] = {
- {255,250,250,"snow"},
- {248,248,255,"ghost white"},
- {248,248,255,"GhostWhite"},
- {245,245,245,"white smoke"},
- {245,245,245,"WhiteSmoke"},
- {220,220,220,"gainsboro"},
- {255,250,240,"floral white"},
- {255,250,240,"FloralWhite"},
- {253,245,230,"old lace"},
- {253,245,230,"OldLace"},
- {250,240,230,"linen"},
- {250,235,215,"antique white"},
- {250,235,215,"AntiqueWhite"},
- {255,239,213,"papaya whip"},
- {255,239,213,"PapayaWhip"},
- {255,235,205,"blanched almond"},
- {255,235,205,"BlanchedAlmond"},
- {255,228,196,"bisque"},
- {255,218,185,"peach puff"},
- {255,218,185,"PeachPuff"},
- {255,222,173,"navajo white"},
- {255,222,173,"NavajoWhite"},
- {255,228,181,"moccasin"},
- {255,248,220,"cornsilk"},
- {255,255,240,"ivory"},
- {255,250,205,"lemon chiffon"},
- {255,250,205,"LemonChiffon"},
- {255,245,238,"seashell"},
- {240,255,240,"honeydew"},
- {245,255,250,"mint cream"},
- {245,255,250,"MintCream"},
- {240,255,255,"azure"},
- {240,248,255,"alice blue"},
- {240,248,255,"AliceBlue"},
- {230,230,250,"lavender"},
- {255,240,245,"lavender blush"},
- {255,240,245,"LavenderBlush"},
- {255,228,225,"misty rose"},
- {255,228,225,"MistyRose"},
- {255,255,255,"white"},
- {0,0,0,"black"},
- {47,79,79,"dark slate gray"},
- {47,79,79,"DarkSlateGray"},
- {47,79,79,"dark slate grey"},
- {47,79,79,"DarkSlateGrey"},
- {105,105,105,"dim gray"},
- {105,105,105,"DimGray"},
- {105,105,105,"dim grey"},
- {105,105,105,"DimGrey"},
- {112,128,144,"slate gray"},
- {112,128,144,"SlateGray"},
- {112,128,144,"slate grey"},
- {112,128,144,"SlateGrey"},
- {119,136,153,"light slate gray"},
- {119,136,153,"LightSlateGray"},
- {119,136,153,"light slate grey"},
- {119,136,153,"LightSlateGrey"},
- {192,192,192,"gray"},
- {192,192,192,"grey"},
- {211,211,211,"light grey"},
- {211,211,211,"LightGrey"},
- {211,211,211,"light gray"},
- {211,211,211,"LightGray"},
- {25,25,112,"midnight blue"},
- {25,25,112,"MidnightBlue"},
- {0,0,128,"navy"},
- {0,0,128,"navy blue"},
- {0,0,128,"NavyBlue"},
- {100,149,237,"cornflower blue"},
- {100,149,237,"CornflowerBlue"},
- {72,61,139,"dark slate blue"},
- {72,61,139,"DarkSlateBlue"},
- {106,90,205,"slate blue"},
- {106,90,205,"SlateBlue"},
- {123,104,238,"medium slate blue"},
- {123,104,238,"MediumSlateBlue"},
- {132,112,255,"light slate blue"},
- {132,112,255,"LightSlateBlue"},
- {0,0,205,"medium blue"},
- {0,0,205,"MediumBlue"},
- {65,105,225,"royal blue"},
- {65,105,225,"RoyalBlue"},
- {0,0,255,"blue"},
- {30,144,255,"dodger blue"},
- {30,144,255,"DodgerBlue"},
- {0,191,255,"deep sky blue"},
- {0,191,255,"DeepSkyBlue"},
- {135,206,235,"sky blue"},
- {135,206,235,"SkyBlue"},
- {135,206,250,"light sky blue"},
- {135,206,250,"LightSkyBlue"},
- {70,130,180,"steel blue"},
- {70,130,180,"SteelBlue"},
- {176,196,222,"light steel blue"},
- {176,196,222,"LightSteelBlue"},
- {173,216,230,"light blue"},
- {173,216,230,"LightBlue"},
- {176,224,230,"powder blue"},
- {176,224,230,"PowderBlue"},
- {175,238,238,"pale turquoise"},
- {175,238,238,"PaleTurquoise"},
- {0,206,209,"dark turquoise"},
- {0,206,209,"DarkTurquoise"},
- {72,209,204,"medium turquoise"},
- {72,209,204,"MediumTurquoise"},
- {64,224,208,"turquoise"},
- {0,255,255,"cyan"},
- {224,255,255,"light cyan"},
- {224,255,255,"LightCyan"},
- {95,158,160,"cadet blue"},
- {95,158,160,"CadetBlue"},
- {102,205,170,"medium aquamarine"},
- {102,205,170,"MediumAquamarine"},
- {127,255,212,"aquamarine"},
- {0,100,0,"dark green"},
- {0,100,0,"DarkGreen"},
- {85,107,47,"dark olive green"},
- {85,107,47,"DarkOliveGreen"},
- {143,188,143,"dark sea green"},
- {143,188,143,"DarkSeaGreen"},
- {46,139,87,"sea green"},
- {46,139,87,"SeaGreen"},
- {60,179,113,"medium sea green"},
- {60,179,113,"MediumSeaGreen"},
- {32,178,170,"light sea green"},
- {32,178,170,"LightSeaGreen"},
- {152,251,152,"pale green"},
- {152,251,152,"PaleGreen"},
- {0,255,127,"spring green"},
- {0,255,127,"SpringGreen"},
- {124,252,0,"lawn green"},
- {124,252,0,"LawnGreen"},
- {0,255,0,"green"},
- {127,255,0,"chartreuse"},
- {0,250,154,"medium spring green"},
- {0,250,154,"MediumSpringGreen"},
- {173,255,47,"green yellow"},
- {173,255,47,"GreenYellow"},
- {50,205,50,"lime green"},
- {50,205,50,"LimeGreen"},
- {154,205,50,"yellow green"},
- {154,205,50,"YellowGreen"},
- {34,139,34,"forest green"},
- {34,139,34,"ForestGreen"},
- {107,142,35,"olive drab"},
- {107,142,35,"OliveDrab"},
- {189,183,107,"dark khaki"},
- {189,183,107,"DarkKhaki"},
- {240,230,140,"khaki"},
- {238,232,170,"pale goldenrod"},
- {238,232,170,"PaleGoldenrod"},
- {250,250,210,"light goldenrod yellow"},
- {250,250,210,"LightGoldenrodYellow"},
- {255,255,224,"light yellow"},
- {255,255,224,"LightYellow"},
- {255,255,0,"yellow"},
- {255,215,0,"gold"},
- {238,221,130,"light goldenrod"},
- {238,221,130,"LightGoldenrod"},
- {218,165,32,"goldenrod"},
- {184,134,11,"dark goldenrod"},
- {184,134,11,"DarkGoldenrod"},
- {188,143,143,"rosy brown"},
- {188,143,143,"RosyBrown"},
- {205,92,92,"indian red"},
- {205,92,92,"IndianRed"},
- {139,69,19,"saddle brown"},
- {139,69,19,"SaddleBrown"},
- {160,82,45,"sienna"},
- {205,133,63,"peru"},
- {222,184,135,"burlywood"},
- {245,245,220,"beige"},
- {245,222,179,"wheat"},
- {244,164,96,"sandy brown"},
- {244,164,96,"SandyBrown"},
- {210,180,140,"tan"},
- {210,105,30,"chocolate"},
- {178,34,34,"firebrick"},
- {165,42,42,"brown"},
- {233,150,122,"dark salmon"},
- {233,150,122,"DarkSalmon"},
- {250,128,114,"salmon"},
- {255,160,122,"light salmon"},
- {255,160,122,"LightSalmon"},
- {255,165,0,"orange"},
- {255,140,0,"dark orange"},
- {255,140,0,"DarkOrange"},
- {255,127,80,"coral"},
- {240,128,128,"light coral"},
- {240,128,128,"LightCoral"},
- {255,99,71,"tomato"},
- {255,69,0,"orange red"},
- {255,69,0,"OrangeRed"},
- {255,0,0,"red"},
- {255,105,180,"hot pink"},
- {255,105,180,"HotPink"},
- {255,20,147,"deep pink"},
- {255,20,147,"DeepPink"},
- {255,192,203,"pink"},
- {255,182,193,"light pink"},
- {255,182,193,"LightPink"},
- {219,112,147,"pale violet red"},
- {219,112,147,"PaleVioletRed"},
- {176,48,96,"maroon"},
- {199,21,133,"medium violet red"},
- {199,21,133,"MediumVioletRed"},
- {208,32,144,"violet red"},
- {208,32,144,"VioletRed"},
- {255,0,255,"magenta"},
- {238,130,238,"violet"},
- {221,160,221,"plum"},
- {218,112,214,"orchid"},
- {186,85,211,"medium orchid"},
- {186,85,211,"MediumOrchid"},
- {153,50,204,"dark orchid"},
- {153,50,204,"DarkOrchid"},
- {148,0,211,"dark violet"},
- {148,0,211,"DarkViolet"},
- {138,43,226,"blue violet"},
- {138,43,226,"BlueViolet"},
- {160,32,240,"purple"},
- {147,112,219,"medium purple"},
- {147,112,219,"MediumPurple"},
- {216,191,216,"thistle"},
- {255,250,250,"snow1"},
- {238,233,233,"snow2"},
- {205,201,201,"snow3"},
- {139,137,137,"snow4"},
- {255,245,238,"seashell1"},
- {238,229,222,"seashell2"},
- {205,197,191,"seashell3"},
- {139,134,130,"seashell4"},
- {255,239,219,"AntiqueWhite1"},
- {238,223,204,"AntiqueWhite2"},
- {205,192,176,"AntiqueWhite3"},
- {139,131,120,"AntiqueWhite4"},
- {255,228,196,"bisque1"},
- {238,213,183,"bisque2"},
- {205,183,158,"bisque3"},
- {139,125,107,"bisque4"},
- {255,218,185,"PeachPuff1"},
- {238,203,173,"PeachPuff2"},
- {205,175,149,"PeachPuff3"},
- {139,119,101,"PeachPuff4"},
- {255,222,173,"NavajoWhite1"},
- {238,207,161,"NavajoWhite2"},
- {205,179,139,"NavajoWhite3"},
- {139,121,94,"NavajoWhite4"},
- {255,250,205,"LemonChiffon1"},
- {238,233,191,"LemonChiffon2"},
- {205,201,165,"LemonChiffon3"},
- {139,137,112,"LemonChiffon4"},
- {255,248,220,"cornsilk1"},
- {238,232,205,"cornsilk2"},
- {205,200,177,"cornsilk3"},
- {139,136,120,"cornsilk4"},
- {255,255,240,"ivory1"},
- {238,238,224,"ivory2"},
- {205,205,193,"ivory3"},
- {139,139,131,"ivory4"},
- {240,255,240,"honeydew1"},
- {224,238,224,"honeydew2"},
- {193,205,193,"honeydew3"},
- {131,139,131,"honeydew4"},
- {255,240,245,"LavenderBlush1"},
- {238,224,229,"LavenderBlush2"},
- {205,193,197,"LavenderBlush3"},
- {139,131,134,"LavenderBlush4"},
- {255,228,225,"MistyRose1"},
- {238,213,210,"MistyRose2"},
- {205,183,181,"MistyRose3"},
- {139,125,123,"MistyRose4"},
- {240,255,255,"azure1"},
- {224,238,238,"azure2"},
- {193,205,205,"azure3"},
- {131,139,139,"azure4"},
- {131,111,255,"SlateBlue1"},
- {122,103,238,"SlateBlue2"},
- {105,89,205,"SlateBlue3"},
- {71,60,139,"SlateBlue4"},
- {72,118,255,"RoyalBlue1"},
- {67,110,238,"RoyalBlue2"},
- {58,95,205,"RoyalBlue3"},
- {39,64,139,"RoyalBlue4"},
- {0,0,255,"blue1"},
- {0,0,238,"blue2"},
- {0,0,205,"blue3"},
- {0,0,139,"blue4"},
- {30,144,255,"DodgerBlue1"},
- {28,134,238,"DodgerBlue2"},
- {24,116,205,"DodgerBlue3"},
- {16,78,139,"DodgerBlue4"},
- {99,184,255,"SteelBlue1"},
- {92,172,238,"SteelBlue2"},
- {79,148,205,"SteelBlue3"},
- {54,100,139,"SteelBlue4"},
- {0,191,255,"DeepSkyBlue1"},
- {0,178,238,"DeepSkyBlue2"},
- {0,154,205,"DeepSkyBlue3"},
- {0,104,139,"DeepSkyBlue4"},
- {135,206,255,"SkyBlue1"},
- {126,192,238,"SkyBlue2"},
- {108,166,205,"SkyBlue3"},
- {74,112,139,"SkyBlue4"},
- {176,226,255,"LightSkyBlue1"},
- {164,211,238,"LightSkyBlue2"},
- {141,182,205,"LightSkyBlue3"},
- {96,123,139,"LightSkyBlue4"},
- {198,226,255,"SlateGray1"},
- {185,211,238,"SlateGray2"},
- {159,182,205,"SlateGray3"},
- {108,123,139,"SlateGray4"},
- {202,225,255,"LightSteelBlue1"},
- {188,210,238,"LightSteelBlue2"},
- {162,181,205,"LightSteelBlue3"},
- {110,123,139,"LightSteelBlue4"},
- {191,239,255,"LightBlue1"},
- {178,223,238,"LightBlue2"},
- {154,192,205,"LightBlue3"},
- {104,131,139,"LightBlue4"},
- {224,255,255,"LightCyan1"},
- {209,238,238,"LightCyan2"},
- {180,205,205,"LightCyan3"},
- {122,139,139,"LightCyan4"},
- {187,255,255,"PaleTurquoise1"},
- {174,238,238,"PaleTurquoise2"},
- {150,205,205,"PaleTurquoise3"},
- {102,139,139,"PaleTurquoise4"},
- {152,245,255,"CadetBlue1"},
- {142,229,238,"CadetBlue2"},
- {122,197,205,"CadetBlue3"},
- {83,134,139,"CadetBlue4"},
- {0,245,255,"turquoise1"},
- {0,229,238,"turquoise2"},
- {0,197,205,"turquoise3"},
- {0,134,139,"turquoise4"},
- {0,255,255,"cyan1"},
- {0,238,238,"cyan2"},
- {0,205,205,"cyan3"},
- {0,139,139,"cyan4"},
- {151,255,255,"DarkSlateGray1"},
- {141,238,238,"DarkSlateGray2"},
- {121,205,205,"DarkSlateGray3"},
- {82,139,139,"DarkSlateGray4"},
- {127,255,212,"aquamarine1"},
- {118,238,198,"aquamarine2"},
- {102,205,170,"aquamarine3"},
- {69,139,116,"aquamarine4"},
- {193,255,193,"DarkSeaGreen1"},
- {180,238,180,"DarkSeaGreen2"},
- {155,205,155,"DarkSeaGreen3"},
- {105,139,105,"DarkSeaGreen4"},
- {84,255,159,"SeaGreen1"},
- {78,238,148,"SeaGreen2"},
- {67,205,128,"SeaGreen3"},
- {46,139,87,"SeaGreen4"},
- {154,255,154,"PaleGreen1"},
- {144,238,144,"PaleGreen2"},
- {124,205,124,"PaleGreen3"},
- {84,139,84,"PaleGreen4"},
- {0,255,127,"SpringGreen1"},
- {0,238,118,"SpringGreen2"},
- {0,205,102,"SpringGreen3"},
- {0,139,69,"SpringGreen4"},
- {0,255,0,"green1"},
- {0,238,0,"green2"},
- {0,205,0,"green3"},
- {0,139,0,"green4"},
- {127,255,0,"chartreuse1"},
- {118,238,0,"chartreuse2"},
- {102,205,0,"chartreuse3"},
- {69,139,0,"chartreuse4"},
- {192,255,62,"OliveDrab1"},
- {179,238,58,"OliveDrab2"},
- {154,205,50,"OliveDrab3"},
- {105,139,34,"OliveDrab4"},
- {202,255,112,"DarkOliveGreen1"},
- {188,238,104,"DarkOliveGreen2"},
- {162,205,90,"DarkOliveGreen3"},
- {110,139,61,"DarkOliveGreen4"},
- {255,246,143,"khaki1"},
- {238,230,133,"khaki2"},
- {205,198,115,"khaki3"},
- {139,134,78,"khaki4"},
- {255,236,139,"LightGoldenrod1"},
- {238,220,130,"LightGoldenrod2"},
- {205,190,112,"LightGoldenrod3"},
- {139,129,76,"LightGoldenrod4"},
- {255,255,224,"LightYellow1"},
- {238,238,209,"LightYellow2"},
- {205,205,180,"LightYellow3"},
- {139,139,122,"LightYellow4"},
- {255,255,0,"yellow1"},
- {238,238,0,"yellow2"},
- {205,205,0,"yellow3"},
- {139,139,0,"yellow4"},
- {255,215,0,"gold1"},
- {238,201,0,"gold2"},
- {205,173,0,"gold3"},
- {139,117,0,"gold4"},
- {255,193,37,"goldenrod1"},
- {238,180,34,"goldenrod2"},
- {205,155,29,"goldenrod3"},
- {139,105,20,"goldenrod4"},
- {255,185,15,"DarkGoldenrod1"},
- {238,173,14,"DarkGoldenrod2"},
- {205,149,12,"DarkGoldenrod3"},
- {139,101,8,"DarkGoldenrod4"},
- {255,193,193,"RosyBrown1"},
- {238,180,180,"RosyBrown2"},
- {205,155,155,"RosyBrown3"},
- {139,105,105,"RosyBrown4"},
- {255,106,106,"IndianRed1"},
- {238,99,99,"IndianRed2"},
- {205,85,85,"IndianRed3"},
- {139,58,58,"IndianRed4"},
- {255,130,71,"sienna1"},
- {238,121,66,"sienna2"},
- {205,104,57,"sienna3"},
- {139,71,38,"sienna4"},
- {255,211,155,"burlywood1"},
- {238,197,145,"burlywood2"},
- {205,170,125,"burlywood3"},
- {139,115,85,"burlywood4"},
- {255,231,186,"wheat1"},
- {238,216,174,"wheat2"},
- {205,186,150,"wheat3"},
- {139,126,102,"wheat4"},
- {255,165,79,"tan1"},
- {238,154,73,"tan2"},
- {205,133,63,"tan3"},
- {139,90,43,"tan4"},
- {255,127,36,"chocolate1"},
- {238,118,33,"chocolate2"},
- {205,102,29,"chocolate3"},
- {139,69,19,"chocolate4"},
- {255,48,48,"firebrick1"},
- {238,44,44,"firebrick2"},
- {205,38,38,"firebrick3"},
- {139,26,26,"firebrick4"},
- {255,64,64,"brown1"},
- {238,59,59,"brown2"},
- {205,51,51,"brown3"},
- {139,35,35,"brown4"},
- {255,140,105,"salmon1"},
- {238,130,98,"salmon2"},
- {205,112,84,"salmon3"},
- {139,76,57,"salmon4"},
- {255,160,122,"LightSalmon1"},
- {238,149,114,"LightSalmon2"},
- {205,129,98,"LightSalmon3"},
- {139,87,66,"LightSalmon4"},
- {255,165,0,"orange1"},
- {238,154,0,"orange2"},
- {205,133,0,"orange3"},
- {139,90,0,"orange4"},
- {255,127,0,"DarkOrange1"},
- {238,118,0,"DarkOrange2"},
- {205,102,0,"DarkOrange3"},
- {139,69,0,"DarkOrange4"},
- {255,114,86,"coral1"},
- {238,106,80,"coral2"},
- {205,91,69,"coral3"},
- {139,62,47,"coral4"},
- {255,99,71,"tomato1"},
- {238,92,66,"tomato2"},
- {205,79,57,"tomato3"},
- {139,54,38,"tomato4"},
- {255,69,0,"OrangeRed1"},
- {238,64,0,"OrangeRed2"},
- {205,55,0,"OrangeRed3"},
- {139,37,0,"OrangeRed4"},
- {255,0,0,"red1"},
- {238,0,0,"red2"},
- {205,0,0,"red3"},
- {139,0,0,"red4"},
- {255,20,147,"DeepPink1"},
- {238,18,137,"DeepPink2"},
- {205,16,118,"DeepPink3"},
- {139,10,80,"DeepPink4"},
- {255,110,180,"HotPink1"},
- {238,106,167,"HotPink2"},
- {205,96,144,"HotPink3"},
- {139,58,98,"HotPink4"},
- {255,181,197,"pink1"},
- {238,169,184,"pink2"},
- {205,145,158,"pink3"},
- {139,99,108,"pink4"},
- {255,174,185,"LightPink1"},
- {238,162,173,"LightPink2"},
- {205,140,149,"LightPink3"},
- {139,95,101,"LightPink4"},
- {255,130,171,"PaleVioletRed1"},
- {238,121,159,"PaleVioletRed2"},
- {205,104,137,"PaleVioletRed3"},
- {139,71,93,"PaleVioletRed4"},
- {255,52,179,"maroon1"},
- {238,48,167,"maroon2"},
- {205,41,144,"maroon3"},
- {139,28,98,"maroon4"},
- {255,62,150,"VioletRed1"},
- {238,58,140,"VioletRed2"},
- {205,50,120,"VioletRed3"},
- {139,34,82,"VioletRed4"},
- {255,0,255,"magenta1"},
- {238,0,238,"magenta2"},
- {205,0,205,"magenta3"},
- {139,0,139,"magenta4"},
- {255,131,250,"orchid1"},
- {238,122,233,"orchid2"},
- {205,105,201,"orchid3"},
- {139,71,137,"orchid4"},
- {255,187,255,"plum1"},
- {238,174,238,"plum2"},
- {205,150,205,"plum3"},
- {139,102,139,"plum4"},
- {224,102,255,"MediumOrchid1"},
- {209,95,238,"MediumOrchid2"},
- {180,82,205,"MediumOrchid3"},
- {122,55,139,"MediumOrchid4"},
- {191,62,255,"DarkOrchid1"},
- {178,58,238,"DarkOrchid2"},
- {154,50,205,"DarkOrchid3"},
- {104,34,139,"DarkOrchid4"},
- {155,48,255,"purple1"},
- {145,44,238,"purple2"},
- {125,38,205,"purple3"},
- {85,26,139,"purple4"},
- {171,130,255,"MediumPurple1"},
- {159,121,238,"MediumPurple2"},
- {137,104,205,"MediumPurple3"},
- {93,71,139,"MediumPurple4"},
- {255,225,255,"thistle1"},
- {238,210,238,"thistle2"},
- {205,181,205,"thistle3"},
- {139,123,139,"thistle4"},
- {0,0,0,"gray0"},
- {0,0,0,"grey0"},
- {3,3,3,"gray1"},
- {3,3,3,"grey1"},
- {5,5,5,"gray2"},
- {5,5,5,"grey2"},
- {8,8,8,"gray3"},
- {8,8,8,"grey3"},
- {10,10,10,"gray4"},
- {10,10,10,"grey4"},
- {13,13,13,"gray5"},
- {13,13,13,"grey5"},
- {15,15,15,"gray6"},
- {15,15,15,"grey6"},
- {18,18,18,"gray7"},
- {18,18,18,"grey7"},
- {20,20,20,"gray8"},
- {20,20,20,"grey8"},
- {23,23,23,"gray9"},
- {23,23,23,"grey9"},
- {26,26,26,"gray10"},
- {26,26,26,"grey10"},
- {28,28,28,"gray11"},
- {28,28,28,"grey11"},
- {31,31,31,"gray12"},
- {31,31,31,"grey12"},
- {33,33,33,"gray13"},
- {33,33,33,"grey13"},
- {36,36,36,"gray14"},
- {36,36,36,"grey14"},
- {38,38,38,"gray15"},
- {38,38,38,"grey15"},
- {41,41,41,"gray16"},
- {41,41,41,"grey16"},
- {43,43,43,"gray17"},
- {43,43,43,"grey17"},
- {46,46,46,"gray18"},
- {46,46,46,"grey18"},
- {48,48,48,"gray19"},
- {48,48,48,"grey19"},
- {51,51,51,"gray20"},
- {51,51,51,"grey20"},
- {54,54,54,"gray21"},
- {54,54,54,"grey21"},
- {56,56,56,"gray22"},
- {56,56,56,"grey22"},
- {59,59,59,"gray23"},
- {59,59,59,"grey23"},
- {61,61,61,"gray24"},
- {61,61,61,"grey24"},
- {64,64,64,"gray25"},
- {64,64,64,"grey25"},
- {66,66,66,"gray26"},
- {66,66,66,"grey26"},
- {69,69,69,"gray27"},
- {69,69,69,"grey27"},
- {71,71,71,"gray28"},
- {71,71,71,"grey28"},
- {74,74,74,"gray29"},
- {74,74,74,"grey29"},
- {77,77,77,"gray30"},
- {77,77,77,"grey30"},
- {79,79,79,"gray31"},
- {79,79,79,"grey31"},
- {82,82,82,"gray32"},
- {82,82,82,"grey32"},
- {84,84,84,"gray33"},
- {84,84,84,"grey33"},
- {87,87,87,"gray34"},
- {87,87,87,"grey34"},
- {89,89,89,"gray35"},
- {89,89,89,"grey35"},
- {92,92,92,"gray36"},
- {92,92,92,"grey36"},
- {94,94,94,"gray37"},
- {94,94,94,"grey37"},
- {97,97,97,"gray38"},
- {97,97,97,"grey38"},
- {99,99,99,"gray39"},
- {99,99,99,"grey39"},
- {102,102,102,"gray40"},
- {102,102,102,"grey40"},
- {105,105,105,"gray41"},
- {105,105,105,"grey41"},
- {107,107,107,"gray42"},
- {107,107,107,"grey42"},
- {110,110,110,"gray43"},
- {110,110,110,"grey43"},
- {112,112,112,"gray44"},
- {112,112,112,"grey44"},
- {115,115,115,"gray45"},
- {115,115,115,"grey45"},
- {117,117,117,"gray46"},
- {117,117,117,"grey46"},
- {120,120,120,"gray47"},
- {120,120,120,"grey47"},
- {122,122,122,"gray48"},
- {122,122,122,"grey48"},
- {125,125,125,"gray49"},
- {125,125,125,"grey49"},
- {127,127,127,"gray50"},
- {127,127,127,"grey50"},
- {130,130,130,"gray51"},
- {130,130,130,"grey51"},
- {133,133,133,"gray52"},
- {133,133,133,"grey52"},
- {135,135,135,"gray53"},
- {135,135,135,"grey53"},
- {138,138,138,"gray54"},
- {138,138,138,"grey54"},
- {140,140,140,"gray55"},
- {140,140,140,"grey55"},
- {143,143,143,"gray56"},
- {143,143,143,"grey56"},
- {145,145,145,"gray57"},
- {145,145,145,"grey57"},
- {148,148,148,"gray58"},
- {148,148,148,"grey58"},
- {150,150,150,"gray59"},
- {150,150,150,"grey59"},
- {153,153,153,"gray60"},
- {153,153,153,"grey60"},
- {156,156,156,"gray61"},
- {156,156,156,"grey61"},
- {158,158,158,"gray62"},
- {158,158,158,"grey62"},
- {161,161,161,"gray63"},
- {161,161,161,"grey63"},
- {163,163,163,"gray64"},
- {163,163,163,"grey64"},
- {166,166,166,"gray65"},
- {166,166,166,"grey65"},
- {168,168,168,"gray66"},
- {168,168,168,"grey66"},
- {171,171,171,"gray67"},
- {171,171,171,"grey67"},
- {173,173,173,"gray68"},
- {173,173,173,"grey68"},
- {176,176,176,"gray69"},
- {176,176,176,"grey69"},
- {179,179,179,"gray70"},
- {179,179,179,"grey70"},
- {181,181,181,"gray71"},
- {181,181,181,"grey71"},
- {184,184,184,"gray72"},
- {184,184,184,"grey72"},
- {186,186,186,"gray73"},
- {186,186,186,"grey73"},
- {189,189,189,"gray74"},
- {189,189,189,"grey74"},
- {191,191,191,"gray75"},
- {191,191,191,"grey75"},
- {194,194,194,"gray76"},
- {194,194,194,"grey76"},
- {196,196,196,"gray77"},
- {196,196,196,"grey77"},
- {199,199,199,"gray78"},
- {199,199,199,"grey78"},
- {201,201,201,"gray79"},
- {201,201,201,"grey79"},
- {204,204,204,"gray80"},
- {204,204,204,"grey80"},
- {207,207,207,"gray81"},
- {207,207,207,"grey81"},
- {209,209,209,"gray82"},
- {209,209,209,"grey82"},
- {212,212,212,"gray83"},
- {212,212,212,"grey83"},
- {214,214,214,"gray84"},
- {214,214,214,"grey84"},
- {217,217,217,"gray85"},
- {217,217,217,"grey85"},
- {219,219,219,"gray86"},
- {219,219,219,"grey86"},
- {222,222,222,"gray87"},
- {222,222,222,"grey87"},
- {224,224,224,"gray88"},
- {224,224,224,"grey88"},
- {227,227,227,"gray89"},
- {227,227,227,"grey89"},
- {229,229,229,"gray90"},
- {229,229,229,"grey90"},
- {232,232,232,"gray91"},
- {232,232,232,"grey91"},
- {235,235,235,"gray92"},
- {235,235,235,"grey92"},
- {237,237,237,"gray93"},
- {237,237,237,"grey93"},
- {240,240,240,"gray94"},
- {240,240,240,"grey94"},
- {242,242,242,"gray95"},
- {242,242,242,"grey95"},
- {245,245,245,"gray96"},
- {245,245,245,"grey96"},
- {247,247,247,"gray97"},
- {247,247,247,"grey97"},
- {250,250,250,"gray98"},
- {250,250,250,"grey98"},
- {252,252,252,"gray99"},
- {252,252,252,"grey99"},
- {255,255,255,"gray100"},
- {255,255,255,"grey100"},
- {0,0,0,"sgi gray 0"},
- {0,0,0,"SGIGray0"},
- {0,0,0,"sgi grey 0"},
- {0,0,0,"SGIGrey0"},
- {10,10,10,"sgi gray 4"},
- {10,10,10,"SGIGray4"},
- {10,10,10,"sgi grey 4"},
- {10,10,10,"SGIGrey4"},
- {20,20,20,"sgi gray 8"},
- {20,20,20,"SGIGray8"},
- {20,20,20,"sgi grey 8"},
- {20,20,20,"SGIGrey8"},
- {30,30,30,"sgi gray 12"},
- {30,30,30,"SGIGray12"},
- {30,30,30,"sgi grey 12"},
- {30,30,30,"SGIGrey12"},
- {40,40,40,"sgi gray 16"},
- {40,40,40,"SGIGray16"},
- {40,40,40,"sgi grey 16"},
- {40,40,40,"SGIGrey16"},
- {51,51,51,"sgi gray 20"},
- {51,51,51,"SGIGray20"},
- {51,51,51,"sgi grey 20"},
- {51,51,51,"SGIGrey20"},
- {61,61,61,"sgi gray 24"},
- {61,61,61,"SGIGray24"},
- {61,61,61,"sgi grey 24"},
- {61,61,61,"SGIGrey24"},
- {71,71,71,"sgi gray 28"},
- {71,71,71,"SGIGray28"},
- {71,71,71,"sgi grey 28"},
- {71,71,71,"SGIGrey28"},
- {81,81,81,"sgi gray 32"},
- {81,81,81,"SGIGray32"},
- {81,81,81,"sgi grey 32"},
- {81,81,81,"SGIGrey32"},
- {91,91,91,"sgi gray 36"},
- {91,91,91,"SGIGray36"},
- {91,91,91,"sgi grey 36"},
- {91,91,91,"SGIGrey36"},
- {102,102,102,"sgi gray 40"},
- {102,102,102,"SGIGray40"},
- {102,102,102,"sgi grey 40"},
- {102,102,102,"SGIGrey40"},
- {112,112,112,"sgi gray 44"},
- {112,112,112,"SGIGray44"},
- {112,112,112,"sgi grey 44"},
- {112,112,112,"SGIGrey44"},
- {122,122,122,"sgi gray 48"},
- {122,122,122,"SGIGray48"},
- {122,122,122,"sgi grey 48"},
- {122,122,122,"SGIGrey48"},
- {132,132,132,"sgi gray 52"},
- {132,132,132,"SGIGray52"},
- {132,132,132,"sgi grey 52"},
- {132,132,132,"SGIGrey52"},
- {142,142,142,"sgi gray 56"},
- {142,142,142,"SGIGray56"},
- {142,142,142,"sgi grey 56"},
- {142,142,142,"SGIGrey56"},
- {153,153,153,"sgi gray 60"},
- {153,153,153,"SGIGray60"},
- {153,153,153,"sgi grey 60"},
- {153,153,153,"SGIGrey60"},
- {163,163,163,"sgi gray 64"},
- {163,163,163,"SGIGray64"},
- {163,163,163,"sgi grey 64"},
- {163,163,163,"SGIGrey64"},
- {173,173,173,"sgi gray 68"},
- {173,173,173,"SGIGray68"},
- {173,173,173,"sgi grey 68"},
- {173,173,173,"SGIGrey68"},
- {183,183,183,"sgi gray 72"},
- {183,183,183,"SGIGray72"},
- {183,183,183,"sgi grey 72"},
- {183,183,183,"SGIGrey72"},
- {193,193,193,"sgi gray 76"},
- {193,193,193,"SGIGray76"},
- {193,193,193,"sgi grey 76"},
- {193,193,193,"SGIGrey76"},
- {204,204,204,"sgi gray 80"},
- {204,204,204,"SGIGray80"},
- {204,204,204,"sgi grey 80"},
- {204,204,204,"SGIGrey80"},
- {214,214,214,"sgi gray 84"},
- {214,214,214,"SGIGray84"},
- {214,214,214,"sgi grey 84"},
- {214,214,214,"SGIGrey84"},
- {224,224,224,"sgi gray 88"},
- {224,224,224,"SGIGray88"},
- {224,224,224,"sgi grey 88"},
- {224,224,224,"SGIGrey88"},
- {234,234,234,"sgi gray 92"},
- {234,234,234,"SGIGray92"},
- {234,234,234,"sgi grey 92"},
- {234,234,234,"SGIGrey92"},
- {244,244,244,"sgi gray 96"},
- {244,244,244,"SGIGray96"},
- {244,244,244,"sgi grey 96"},
- {244,244,244,"SGIGrey96"},
- {255,255,255,"sgi gray 100"},
- {255,255,255,"SGIGray100"},
- {255,255,255,"sgi grey 100"},
- {255,255,255,"SGIGrey100"},
- {125,158,192,"sgi light blue"},
- {125,158,192,"SGILightBlue"},
- {85,85,85,"sgi dark gray"},
- {85,85,85,"SGIDarkGray"},
- {85,85,85,"sgi dark grey"},
- {85,85,85,"SGIDarkGrey"},
- {198,113,113,"sgi salmon"},
- {198,113,113,"SGISalmon"},
- {113,198,113,"sgi chartreuse"},
- {113,198,113,"SGIChartreuse"},
- {142,142,56,"sgi olive drab"},
- {142,142,56,"SGIOliveDrab"},
- {113,113,198,"sgi slate blue"},
- {113,113,198,"SGISlateBlue"},
- {142,56,142,"sgi beet"},
- {142,56,142,"SGIBeet"},
- {56,142,142,"sgi teal"},
- {56,142,142,"SGITeal"},
- {170,170,170,"sgi light gray"},
- {170,170,170,"SGILightGray"},
- {170,170,170,"sgi light grey"},
- {170,170,170,"SGILightGrey"},
- {214,214,214,"sgi very light gray"},
- {214,214,214,"SGIVeryLightGray"},
- {214,214,214,"sgi very light grey"},
- {214,214,214,"SGIVeryLightGrey"},
- {132,132,132,"sgi medium gray"},
- {132,132,132,"SGIMediumGray"},
- {132,132,132,"sgi medium grey"},
- {132,132,132,"SGIMediumGrey"},
- {40,40,40,"sgi very dark gray"},
- {40,40,40,"SGIVeryDarkGray"},
- {40,40,40,"sgi very dark grey"},
- {40,40,40,"SGIVeryDarkGrey"},
- {197,193,170,"sgi bright gray"},
- {197,193,170,"SGIBrightGray"},
- {197,193,170,"sgi bright grey"},
- {197,193,170,"SGIBrightGrey"},
- {75,0,130,"Indigo"},
- {220,20,60,"Crimson"},
- };
-
- #define NUMBER(x) (sizeof(x) / sizeof(x[0]))
-
- static void dumpCMAP(char *title, char *start,
- int size, unsigned char data[GIF_MAXCOLORS][3])
- {
- int i;
- int j;
-
- if (size == 0)
- return;
- printf("%s\n", title);
-
- for (i = 0; i < size; i++) {
- int r = data[i][0];
- int g = data[i][1];
- int b = data[i][2];
- char *name = NULL;
-
- for (j = 0; j < NUMBER(colorTable); j++) {
- if (colorTable[j].r == r &&
- colorTable[j].g == g &&
- colorTable[j].b == b) {
- name = colorTable[j].name;
- break;
- }
- }
-
- printf("%s%3d: %3d %3d %3d (0x%02x 0x%02x 0x%02x) %s\n",
- start, i+1,
- data[i][0], data[i][1], data[i][2],
- data[i][0], data[i][1], data[i][2],
- name == NULL ? "" : name);
- }
- }
-
- static void GIFDump(char *name, GIFStream *stream, int commentsOnly)
- {
- GIFData *cur;
-
- if (stream == NULL) {
- printf("GIF Image %s -- BAD Image\n", name);
- return;
- }
-
- printf("GIF Image %s (%dx%d)\n",
- name == NULL ? "STDIN" : name,
- stream->width, stream->height);
- if (!commentsOnly) {
- if (stream->cmapSize != 0)
- dumpCMAP("Image Colormap", "",
- stream->cmapSize, stream->cmapData);
- }
-
- for (cur = stream->data; cur != NULL; cur = cur->next) {
- if (commentsOnly && cur->type != gif_comment)
- continue;
- switch (cur->type) {
- case gif_image:
- printf(" %sImage at %d,%d size %dx%d\n",
- cur->data.image.interlaced ?
- "Interlaced " : "",
- cur->x, cur->y, cur->width, cur->height);
- if (cur->info.transparent >= 0) {
- printf("\tTransparent pixel = %d\n",
- cur->info.transparent + 1);
- }
- if (cur->data.image.cmapSize != 0) {
- dumpCMAP(" Image Colormap", "\t",
- cur->data.image.cmapSize,
- cur->data.image.cmapData);
- }
- break;
- case gif_comment:
- printf(" Comment: %*.*s\n",
- cur->data.comment.len,
- cur->data.comment.len,
- cur->data.comment.text);
- break;
- case gif_text:
- printf(" Image Text (at %d,%d): %*.*s\n",
- cur->x, cur->y,
- cur->data.text.len,
- cur->data.text.len,
- cur->data.text.text);
- break;
- }
- }
- }
-
- static void GIFFree(GIFStream *stream)
- {
- GIFData *cur, *nxt;
-
- if (stream == NULL)
- return;
- cur = stream->data;
-
- while (cur != NULL) {
- nxt = cur->next;
- switch (cur->type) {
- case gif_image:
- free(cur->data.image.data);
- break;
- case gif_comment:
- free(cur->data.comment.text);
- break;
- case gif_text:
- free(cur->data.text.text);
- break;
- }
- free(cur);
- cur = nxt;
- }
- free(stream);
- }
-
- static void setInterlace(GIFStream *stream, int flg)
- {
- GIFData *cur = stream->data;
-
- for ( ; cur != NULL; cur = cur->next) {
- if (cur->type == gif_image)
- cur->data.image.interlaced = flg > 0;
- }
- }
- static int toval(char *s)
- {
- if (s[0] == '0' && s[1] == 'x') {
- int v;
- sscanf(s, "0x%x", &v);
- return v;
- } else {
- return atoi(s);
- }
- }
-
- static int matchCMAP(char *tpix, int size, unsigned char data[256][3])
- {
- char buf[80], *cp;
- char c[3][20];
- int r, g, b;
- int i;
- int min, dist;
-
- if (strchr(tpix, ',') == NULL) {
- int v = atoi(tpix);
-
- if (v != 0) {
- if (v <= size && v > 0)
- return v - 1;
- return -1;
- }
- for (v = 0; v < NUMBER(colorTable); v++) {
- if (strcasecmp(colorTable[v].name, tpix) == 0)
- break;
- }
- if (v == NUMBER(colorTable))
- return -2;
-
- sprintf(buf, "%d,%d,%d",
- colorTable[v].r, colorTable[v].g, colorTable[v].b);
- tpix = buf;
- }
-
- for (cp = tpix, i = 0; i < 3; i++, cp = strchr(cp, ',')) {
- char *x;
-
- if (cp == NULL)
- break;
- if (*cp == ',')
- cp++;
-
- strncpy(c[i], cp, 10);
- if ((x = strchr(c[i], ',')) != NULL)
- *x = '\0';
- }
-
- if (i != 3)
- return -3;
-
- r = toval(c[0]);
- g = toval(c[1]);
- b = toval(c[2]);
-
- min = -3;
- dist = 255 * 255 * 3;
-
- for (i = 0; i < size && dist != 0; i++) {
- int d;
- int dr = data[i][0] - r;
- int dg = data[i][1] - g;
- int db = data[i][2] - b;
-
- if (dr == 0 && dg == 0 && db == 0)
- return i;
-
- d = dr * dr + dg * dg + db * b;
-
- if (d < dist) {
- dist = d;
- min = i;
- }
- }
- if (dist > 0)
- fprintf(stderr, "No exact match using pixel %d\n", min + 1);
- return min;
- }
-
- static void setTransparent(GIFStream *stream, char *tpix)
- {
- GIFData *cur = stream->data;
- int cnt = 0;
-
- for ( ; cur != NULL; cur = cur->next) {
- int idx;
-
- if (cur->type != gif_image)
- continue;
- cnt++;
- if (cur->info.transparent != -1) {
- fprintf(stderr,"Warning: image %d was already transparent\n");
- }
-
- if (cur->data.image.cmapSize != 0) {
- idx = matchCMAP(tpix, cur->data.image.cmapSize,
- cur->data.image.cmapData);
- } else {
- idx = matchCMAP(tpix, stream->cmapSize,
- stream->cmapData);
- }
- if (idx == -1) {
- fprintf(stderr,"Warning: Pixel index larger than colormap size\n");
- } else if (idx == -2) {
- fprintf(stderr,"Warning: No such color known (%s)\n", tpix);
- } else {
- cur->info.transparent = idx;
- }
- }
- }
-
- static void addComments(GIFStream *stream, char *text)
- {
- GIFData *n;
-
- if (text == NULL)
- return;
-
- n = (GIFData *)malloc(sizeof(GIFData));
- n->type = gif_comment;
- n->info.transparent = -1;
- n->info.delayTime = 0;
- n->info.inputFlag = 0;
- n->info.disposal = gif_no_disposal;
- n->width = n->height = n->x = n->y = 0;
- n->data.comment.len = strlen(text);
- n->data.comment.text = (char*)malloc(strlen(text));
- strcpy(n->data.comment.text, text);
-
- n->next = stream->data;
- stream->data = n;
- }
-
- static void stripComment(GIFStream *stream)
- {
- GIFData *nxt, *cur, *prev = NULL;
-
- for (cur = stream->data; cur != NULL; cur = nxt) {
- nxt = cur->next;
-
- if (cur->type == gif_comment) {
- if (prev == NULL)
- stream->data = cur->next;
- else
- prev->next = cur->next;
- free(cur->data.comment.text);
- free(cur);
- } else {
- prev = cur;
- }
- }
- }
-
- static void info()
- {
- printf("Copyright 1994, Home Pages, Inc.\n");
- printf("\n");
- printf("Permission to use, copy, and distribute GIFTOOL in its entirety, for\n");
- printf("non-commercial purposes, is hereby granted without fee, provided that\n");
- printf("this license information and copyright notice appear in all copies.\n");
- printf("\n");
- printf("Note that distributing GIFTOOL 'bundled' in with ANY product is considered\n");
- printf("to be a 'commercial purpose'.\n");
- printf("\n");
- printf("Also note that any copies of GIFTOOL that are distributed MUST be built\n");
- printf("and/or configured to be in their 'unregistered copy' mode, so that it\n");
- printf("is made obvious to the user that GIFTOOL is shareware, and that they should\n");
- printf("consider donating, or at least reading this License Info.\n");
- printf("\n");
- printf("Permission to use, copy, and distribute GIFTOOL in its entirety, for\n");
- printf("non-commercial purposes, is hereby granted without fee, provided that\n");
- printf("this license information and copyright notice appear in all copies.\n");
- printf("\n");
- printf("Note that distributing GIFTOOL 'bundled' in with ANY product is considered\n");
- printf("to be a 'commercial purpose'.\n");
- printf("\n");
- printf("Also note that any copies of GIFTOOL that are distributed MUST be built\n");
- printf("and/or configured to be in their 'unregistered copy' mode, so that it\n");
- printf("is made obvious to the user that GIFTOOL is shareware, and that they should\n");
- printf("consider donating, or at least reading this License Info.\n");
- printf("\n");
- printf("The software may be modified for your own purposes, but modified\n");
- printf("versions may NOT be distributed without prior consent of the author.\n");
- printf("\n");
- printf("This software is provided 'as-is', without any express or implied\n");
- printf("warranty. In no event will the author be held liable for any damages\n");
- printf("arising from the use of this software.\n");
- printf("\n");
- printf("If you would like to do something with GIFTOOL that this copyright\n");
- printf("prohibits (such as distributing it with a commercial product,\n");
- printf("using portions of the source in some other program, etc.), please\n");
- printf("contact the author. Arrangements can probably easily be worked out.\n");
- printf("\n");
- printf("GIFTOOL is shareware for PERSONAL USE only. You may use GIFTOOL for \n");
- printf("your own amusement, and if you find it nifty, useful, generally cool, \n");
- printf("or of some value to you, your non-deductable donation would be greatly\n");
- printf("appreciated. $10 is the suggested donation, though, of course,\n");
- printf("larger donations are quite welcome. \n");
- printf("\n");
- printf("Commercial, government, and institutional users MUST register their\n");
- printf("copies of GIFTOOL, for the exceedingly REASONABLE price of just $10 per\n");
- printf("workstation. Site licenses are available for those who wish to run \n");
- printf("GIFTOOL on a large number of machines. Please contact Home Pages Inc\n");
- printf("for more details.\n");
- printf("\n");
- printf(" US Mail: Home Pages, Inc.\n");
- printf(" 257 Castro St, Suite 219\n");
- printf(" Mountain View, CA 94041\n");
- printf("\n");
- printf(" Phone: (415) 903-5353\n");
- printf(" EMail: support@homepages.com\n");
- exit(0);
- }
-
- static void usage()
- {
- fprintf(stderr,"Usage: giftool [options] [file]\n");
- fprintf(stderr," giftool (-p|-c|-B) [options] [files...]\n");
- fprintf(stderr,"\t-B\tBatch Mode, read and write the same filename\n");
- fprintf(stderr,"\t-i\tSet GIF Interlace mode ON\n");
- fprintf(stderr,"\t+i\tSet GIF Interlace mode OFF\n");
- fprintf(stderr,"\t-p\tPrint information about file(s)\n");
- fprintf(stderr,"\t-c\tPrint comment information\n");
- fprintf(stderr,"\t+c\tAdd comments to file(s)\n");
- fprintf(stderr,"\t-C\tStrip comment from file(s)\n");
- fprintf(stderr,"\t-o file\tSend output to 'file'\n");
- fprintf(stderr,"\t-rgb name\tUse 'name' as the transparent pixel\n");
- fprintf(stderr,"\t-rgb ##,##,##\ttUse rgb-value as the transparent pixel\n");
- fprintf(stderr,"\t-###\tUsed pixel index as transparent (1 == first colormap entry)\n");
- fprintf(stderr,"\n");
- fprintf(stderr,"For instance you could say 'giftool -B -i *.gif' to convert all your images\nto interlaced GIF files in one easy step.\n");
- fprintf(stderr,"\n");
- fprintf(stderr,"giftool version 1.0 is Copyright 1994 Home Pages, Inc and is shareware.\n");
- fprintf(stderr,"Please, use the -info option to read the licensing information.\n");
- exit(1);
- }
-
- main(int argc, char *argv[])
- {
- int c, i;
- int batchMode = 0;
- int interlace = 0, batchInterlace = 0;
- int print = 0;
- int stripComments = 0, printComments = 0;
- int addTrans = 0, optimize = 0;
- char *transPixel = NULL, *outFile = NULL;
- char *addComment = NULL;
- GIFStream *stream;
- int idx;
- int stdinMode = 0;
-
- for (idx = 1; idx < argc &&
- (argv[idx][0] == '-' || argv[idx][0] == '+'); idx++) {
- char *arg = argv[idx];
- if (strcmp(arg, "-O") == 0) {
- optimize++;
- } else if (strcmp(arg, "-B") == 0) {
- batchMode = 1;
- } else if (strcmp(arg, "+i") == 0) {
- interlace = -1;
- } else if (strcmp(arg, "-i") == 0) {
- interlace = 1;
- } else if (strcmp(arg, "-c") == 0) {
- printComments = 1;
- print++;
- } else if (strncmp(arg, "+c", 2) == 0) {
- if (strlen(arg) != 2)
- arg += 2;
- else
- arg = argv[++idx];
- if (idx == argc) usage();
- addComment = arg;
- } else if (strcmp(arg, "-C") == 0) {
- stripComments++;
- } else if (strcmp(arg, "-p") == 0) {
- print++;
- } else if (strncmp(arg, "-o", 2) == 0) {
- if (strlen(arg) != 2)
- arg += 2;
- else
- arg = argv[++idx];
- if (idx == argc) usage();
- outFile = arg;
- } else if (strncmp(arg, "-rgb", 4) == 0) {
- if (strlen(arg) != 4)
- arg += 4;
- else
- arg = argv[++idx];
- if (idx == argc) usage();
- if (isdigit(*arg) && strchr(arg, ',') == NULL) {
- static char buf[24];
- if (idx == argc-2) usage();
- sprintf(buf, "%d,%d,%d", arg, argv[idx+1], argv[idx+2]);
- idx += 2;
- transPixel = buf;
- } else {
- transPixel = arg;
- }
- } else if (isdigit(arg[1])) {
- transPixel = arg+1;
- } else if (strcmp(arg, "--") == 0) {
- idx++;
- break;
- } else if (strcmp(arg, "-info") == 0) {
- info();
- } else {
- if (strcmp(arg, "-help") != 0)
- printf("Unrecognized option %s\n", arg);
- usage();
- }
- }
-
- if (outFile != NULL && batchMode) {
- fprintf(stderr,"Error: You can't use both the -o and -B options\n");
- usage();
- }
-
- if (!batchMode && !print) {
- if (argc - idx > 1)
- usage();
- }
-
- if (idx == argc) {
- argc++;
- stdinMode = 1;
- batchMode = 0;
- }
-
- for (i = idx; i < argc; i++) {
- GIFStream *stream;
- char *frm;
-
- if (stdinMode) {
- stream = GIFReadFP(stdin);
- frm = NULL;
- } else {
- frm = argv[i];
- stream = GIFRead(frm);
- }
-
- if (print) {
- GIFDump(frm, stream, printComments);
- } else {
- int status;
- char *out;
-
- if (stripComments)
- stripComment(stream);
- addComments(stream, addComment);
- if (transPixel != NULL)
- setTransparent(stream, transPixel);
- if (interlace != 0)
- setInterlace(stream, interlace);
-
- if (batchMode) {
- status = GIFWrite(argv[i], stream, optimize);
- out = argv[i];
- } else {
- if (outFile == NULL) {
- status = GIFWriteFP(stdout, stream, optimize);
- out = "<STDOUT>";
- } else {
- status = GIFWrite(outFile, stream, optimize);
- out = outFile;
- }
- }
- if (status)
- fprintf(stderr, "error writing %s\n", out);
-
- GIFFree(stream);
- }
- }
- }
-